package com.huifer.wgx.service;

import com.huifer.wgx.model.WorkEntity;
import java.sql.Timestamp;
import org.springframework.data.domain.Page;

/**
 * <p>Title : WorkService </p>
 * <p>Description : work service</p>
 *
 * @author huifer
 * @date 2019-03-18
 */
public interface WorkService {


    /**
     * 创建一个工程
     *
     * @param projectName 项目名称
     * @param workName 工程名称
     * @param startTime 开始时间
     * @param personnelName 负责人名称
     * @return 工程 {@link WorkEntity}
     */
    WorkEntity saveWork(String projectName, String workName, Timestamp startTime,
            String personnelName);

    /**
     * 更新项目完成情况
     *
     * @param workName 工程名称
     * @param endTime 结束时间
     * @return 工程 {@link WorkEntity}
     */
    WorkEntity updateWork(String workName, Timestamp endTime);


    /**
     * 查询所有工程
     * @param pageNum 页面号
     * @param pageSize 页面大小
     * @return 工程列表{@link WorkEntity}
     */
    Page<WorkEntity> findAll(Integer pageNum, Integer pageSize);

    /**
     * 根据项目id查询工程
     *
     * @param projectId 项目id
     * @param pageNum 页面号
     * @param pageSize 页面大小
     * @return 工程列表{@link WorkEntity}
     */
    Page<WorkEntity> findWorkByProjectId(Long projectId, Integer pageNum, Integer pageSize);

    /**
     * 根据项目名称查询工程
     *
     * @param projectName 项目名称
     * @param pageNum 页面号
     * @param pageSize 页面大小
     * @return 工程列表{@link WorkEntity}
     */
    Page<WorkEntity> findWorkByProjectName(String projectName, Integer pageNum, Integer pageSize);

    /**
     * 根据项目负责人查询工程
     *
     * @param pName 负责人名称
     * @param pageNum 页面号
     * @param pageSize 页面大小
     * @return 工程列表{@link WorkEntity}
     */
    Page<WorkEntity> findWorkByPersonnel(String pName, Integer pageNum, Integer pageSize);


    /**
     * 更新工程名称
     *
     * @param workId 工程id
     * @param newWorkName 新工程名称
     * @return 工程
     */
    WorkEntity updateWork(Long workId, String newWorkName);

    /**
     * 更新工程名称
     *
     * @param oldWorkName 旧工程名称
     * @param newWorkName 新工程名称
     * @return 工程
     */
    WorkEntity updateWork(String oldWorkName, String newWorkName);

    /**
     * 删除工程
     *
     * @param workId 工程id
     * @return 工程
     */
    WorkEntity deleteWork(Long workId);

    /**
     * 删除工程
     *
     * @param workName 工程名称
     * @return 工程
     */
    WorkEntity deleteWork(String workName);


}
